เกมทายเลข

Number Guess Game

เกมทายเลข (Number Guess Game) วัชกร บุตร์ดีวงษ์

ติดตั้งโมดูลต่างๆ

pip install -r requirements.txt

หรือกรณีมี virtualenv

virtualenv game

บน Windows เรียกใช้ virtualenv game

game\Scripts\activate
pip install -r requirements.txt
เกมทายเลข (Number Guess Game)

เรียกใช้งานเกม

flet num*.py

สร้างไฟล์ EXE

pyinstaller number_guessing_game_by_wk18k.spec
เกมทายเลข (Number Guess Game)

เปิดเกมที่ Build เรียบร้อยแล้ว

  1. เปิดที่โฟลเดอร์ Number guessing game
  2. เปิดตัวเกมชื่อว่า Number Guessing Game By wk18k.exe
เกมทายเลข (Number Guess Game)

วิธีเล่นเกมทายเลข

การเล่นเกมนี้ไม่ยากมาก แค่ทายตัวเลขให้ถูก จะได้รับคะแนนเก็บสะสมไปเรื่อยๆได้ โดยจะมีเวลาเป็นกำหนด หากเวลาหมดจะเป็นการจบเกมโดยปริยาย โดยตัวเลขจะสุ่มทุกครั้งที่ผู้เล่นเริ่มเกม หรือเริ่มเกมใหม่ ทุกการกด เริ่มใหม่จะทำการสุ่มตัวใหม่และลดคะแนนครึ่งของคะแนนที่จะได้รับ

เกมทายเลข (Number Guess Game)

ระดับความยาก

มีอยู่ 3 โหมด คือ
  1. ง่าย
  2. ปานกลาง
  3. ยาก
เกมทายเลข (Number Guess Game)

ระดับง่าย

โหมดนี้จะมีเวลาให้ผู้เล่นทั้งหมด 30 วินาที โดยผู้เล่นจะต้องตอบให้ถูกก่อนที่เวลาจะหมด หากตอบถูกจะได้คะแนนข้อละ 1 คะแนน สุ่มตัวเลขตั้งแต่ 1 - 10 โดยหากผู้ใช้กดปุ่มเริ่มเกมใหม่ หากคะแนนไม่เท่ากับ 0 คะแนนจะถูกลบออกไปครั้งละ 1 / 2 หรือ 0.5

เกมทายเลข (Number Guess Game)

ระดับปานกลาง

โหมดนี้จะมีเวลาให้ผู้เล่นทั้งหมด 30 วินาที โดยผู้เล่นจะต้องตอบให้ถูกก่อนที่เวลาจะหมด หากตอบถูกจะได้คะแนนข้อละ 5 คะแนน สุ่มตัวเลขตั้งแต่ 1 - 100 โดยหากผู้ใช้กดปุ่มเริ่มเกมใหม่ หากคะแนนไม่เท่ากับ 0 คะแนนจะถูกลบออกไปครั้งละ 5 / 2 หรือ 2.5

เกมทายเลข (Number Guess Game)

ระดับยาก

โหมดนี้จะมีเวลาให้ผู้เล่นทั้งหมด 20 วินาที โดยผู้เล่นจะต้องตอบให้ถูกก่อนที่เวลาจะหมด หากตอบถูกจะได้คะแนนข้อละ 10 คะแนน สุ่มตัวเลขตั้งแต่ 1 - 100 โดยหากผู้ใช้กดปุ่มเริ่มเกมใหม่ หากคะแนนไม่เท่ากับ 0 คะแนนจะถูกลบออกไปครั้งละ 10 / 2 หรือ 5

เกมทายเลข (Number Guess Game)

หลังจากเวลาหมดลงผู้เล่นจะบังคับให้กดปุ่มกลับไปหน้าหลัก แต่หลังจากกดปุ่มตัวเกมจะให้ผู้เล่นกรอกชื่อของผู้เล่นเพื่อบันทึกคะแนนลงในตารางคะแนนแล้วกดปุ่มส่งชื่อ หากผู้เล่นไม่ต้องการสามารถกดปุ่มกลับไปหน้าหลักระบบก็จะส่งผู้เล่นไปหน้าแรกของเกม

เกมทายเลข (Number Guess Game)

ส่วนต่างๆของหน้าแรก

เกมทายเลข (Number Guess Game)

ปุ่มเปลี่ยนธีม

ใช้ในการสลับธีมสว่างกับ ธีมมืด

    def theme_changed(e):
        """
        เปลี่ยนธีม สว่าง กับ มืด
        """
        page.theme_mode = (
            ft.ThemeMode.DARK
            if page.theme_mode == ft.ThemeMode.LIGHT
            else ft.ThemeMode.LIGHT
        )
        page.update()
เกมทายเลข (Number Guess Game)

ปุ่มตารางคะแนน

จะส่งไปยังหน้าแสดงคะแนนของผู้เล่นทั้งหมด

    def go_to_scoreboard_Scene(e):
        """
        change scene to scoreboard scene
        """
        page.remove(menu_game_all)
        page.add(scoreboard_scene_all)
        query_database()
        scoreboard_scene.list_player_rank.content = ft.Column(
            scoreboard_scene.resutl_data_list_player_rank()
        )
        scoreboard_scene.rank_1_name.value = query_database()[0][0]
        scoreboard_scene.rank_1_score.value = query_database()[0][1]
        page.update()
เกมทายเลข (Number Guess Game)

ปุ่มวิธีการเล่น

จะส่งไปยังหน้าบอกวิธีการเล่นและวิธีการคิดคะแนนในแต่ละระดับความยาก

    def go_to_help_Scene(e):
        """
        change scene to help scene
        """
        page.scroll = True
        page.add(help_scene_all)
        page.remove(menu_game_all)
เกมทายเลข (Number Guess Game)

ปุ่มออก

สำหรับผู้เล่นที่ต้องการออกจากกดปุ่มนี้ได้เลย

    def exit_game(e):
        """
        Close App
        """
        page.window_destroy()
เกมทายเลข (Number Guess Game)

อุปสรรค์และความท้าทาย

คือการเปลี่ยนหน้าไปยังอีกหน้านึง ซึ่งเป็นความท้าทายมากเนื่องจากโมดูล flet ในการเพิ่มแต่ละ widget จะทำการเก็บเป็น list โดยหากจะเปลี่ยนต้องทำการลบข้อมูลใน list ผู้พัฒนาเลยเลือกวิธีการทำให้ทุกหน้าแยกเป็น class เวลาลบมันออกจะได้ลบทุกอย่างที่อยู่ใน class นั้นๆทิ้งไป

เกมทายเลข (Number Guess Game)

อุปสรรค์และความท้าทาย

ระบบการเปลี่ยนภาษาก็เป็นความท้าทายหนึ่งอย่าง ครั้งแรกผู้พัฒนาจะทำให้สามารถเปลี่ยนได้แบบเรียลไทม์แต่พอมาคำนวณระยะเวลาแล้วจึงตัดสินใจ ว่าหลังจากเปลี่ยนภาษาแล้วจะทำการรีสตาร์ทเกมเพื่อโหลดค่าตัวแปรที่เก็บไว้ในไฟล์ config.json แทน เพื่อความรวดเร็วในการเขียนโค้ด โดยไฟล์ config.json จะถูกสร้างขึ้นเองเมื่อเปิดเกมหลังจากผู้ใช้เลือกภาษาได้แล้วจะเก็บข้อมูลไปยังไฟล์นี้เพื่อบันทึกค่า จากนั้นจะทำการรีสตาร์ทเพื่อโหลดข้อมูลในไฟล์ออกมาเช็คว่าเป็นภาษาอะไร รูปแบบภายในไฟล์ config.json คือ

{
    "langauge": "thai"
}
เกมทายเลข (Number Guess Game)

อุปสรรค์และความท้าทาย

ระบบ Scoreboard ปัญหาที่เจอคือระบบไม่อัพเดทข้อมูลในหน้าตารางคะแนนหลังจากผู้เล่นบันทึกข้อมูลเสร็จเรียบร้อย แต่เปิดเกมปิดใหม่ข้อมูลมาปกติ ทางผู้พัฒนาเลยทำการ query ข้อมูลหลังจากผู้ใช้งานกดปุ่มตารางคะแนน เพื่อโหลดข้อมูลจากฐานข้อมูลออกมาแล้วแสดงข้อมูล หลังจากนั้นทำการใช้คำสั่ง page.update() เพื่ออัพเดท widget ต่างๆของ flet ให้แสดงข้อมูลออกมา

    
    scoreboard_scene.list_player_rank.content = ft.Column(scoreboard_scene.resutl_data_list_player_rank())
    scoreboard_scene.rank_1_name.value = query_database()[0][0] #เอาข้อมูลชื่อออกมาฐานข้อมูล
    scoreboard_scene.rank_1_score.value = query_database()[0][1] #เอาข้อมูลคะแนนออกมาฐานข้อมูล
    score_add_scene.input_name_player.value = "" #ล้างข้อมูลที่อยู่ช่องป้อนชื่อผู้เล่นออก
    score_add_scene.text_show.value = "" #ล้างข้อมูลคะแนนที่ได้ออกไป
    page.update() #อัพเดท widget
เกมทายเลข (Number Guess Game)